package cn.bocai.pc.util;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @describe
 * @auto li.wang
 * @date 2013-11-18 上午10:04:23
 */
public class testIO3 extends FileAlterationListenerAdaptor {
//日志操作
 private static final Logger logger = LoggerFactory.getLogger(testIO3.class);

 /**
  * 文件系统观察者开始检查事件
  */
 @Override
 public void onStart(FileAlterationObserver observer) {
  super.onStart(observer);
  logger.info("文件系统观察者开始检查事件");
 }

 /**
  * 文件系统完成检查事件观测器.
  */
 @Override
 public void onStop(FileAlterationObserver observer) {
  super.onStop(observer);
  logger.info("文件系统完成检查事件观测器");
 }

 /**
  * 目录创建事件
  */
 @Override
 public void onDirectoryCreate(File directory) {
  super.onDirectoryCreate(directory);
  logger.info("目录创建事件: path=" + directory.getAbsolutePath()+"  name="+directory.getName());
 }

 /**
  * Directory changed Event
  */
 @Override
 public void onDirectoryChange(File directory) {
  super.onDirectoryChange(directory);
  logger.info("目录改变事件: path=" + directory.getAbsolutePath()+"  name="+directory.getName());
  findFileName(directory.getAbsolutePath());
 }

 /**
  * Directory deleted Event.
  */
 @Override
 public void onDirectoryDelete(File directory) {
  super.onDirectoryDelete(directory);
  logger.info("目录删除事件: path=" + directory.getAbsolutePath()+"  name="+directory.getName());
 }

 /**
  * File created Event.
  */
 @Override
 public void onFileCreate(File file) {
  super.onFileCreate(file);
  logger.info("文件创建事件: path=" + file.getAbsolutePath()+"  name="+file.getName());

 }

 /**
  * File changed Event.
  */
 @Override
 public void onFileChange(File file) {
  super.onFileChange(file);
  logger.info("文件改变事件: path=" + file.getAbsolutePath()+"  name="+file.getName());
 }

 /**
  * File deleted Event.
  */
 @Override
 public void onFileDelete(File file) {
  super.onFileDelete(file);
  logger.info("文件删除事件: path=" + file.getAbsolutePath()+"  name="+file.getName());
 }

 static final class FileFilterImpl implements FileFilter {

  /**
   * @return return true:返回所有目录下所有文件详细(包含所有子目录)
   * @return return false:返回主目录下所有文件详细(不包含所有子目录)
   */
  @Override
  public boolean accept(File file) {
   //自动生成方法存根
   /*logger.info("文件路径: " + file);*/
   /*logger.info("最后修改时间： " + file.lastModified());*/
   return true;
  }
 }

 public static void main(String[] args) {
  try {

   // 构造观察类主要提供要观察的文件或目录，当然还有详细信息的filter
   FileAlterationObserver observer = new FileAlterationObserver("D:/ruanjian/eclipse/file/newBcai/pc-image/src/main/webapp/2012", new FileFilterImpl());
   // 构造收听类 没啥好说的
   testIO3 listener = new testIO3();
   // 为观察对象添加收听对象
   observer.addListener(listener);
   // 配置Monitor，第一个参数单位是毫秒，是监听的间隔；第二个参数就是绑定我们之前的观察对象。
   FileAlterationMonitor fileMonitor = new FileAlterationMonitor(10000,
     new FileAlterationObserver[] { observer });
   // 启动开始监听
   fileMonitor.start();
  } catch (Exception e) {
   System.out.println("监听启动失败!");
   e.printStackTrace();
  }
 }
 //查找指定目录下的文件
 private void findFileName(String filepath) {
		File file = new File(filepath);
		List<String> list = new ArrayList<String>();
		if (!file.exists() || !file.isDirectory()) {
			System.out.println("目录不存在");
		} else {
			File[] files = file.listFiles();
			/*System.err.println("扫描出图片数目："+files.length);*/
			for (int i = 0; i < files.length; i++) {
				if (files[i].isFile()) {
					if (files[i].getName().endsWith(".jpg")) {
						list.add(files[i].getName());
						/*System.err.println("扫描出图片名称："+files[i].getName());*/
					}
				}
			}
		}

	} 
 
 
}